#ifndef FORM_WIDGETBASE_H
#define FORM_WIDGETBASE_H

#include <QPushButton>
#include <QGroupBox>
#include <QCheckBox>
#include <QMenu>
#include <QMessageBox>
#include <QLineEdit>
#include <QComboBox>

#include "components/StyleSheetSet.h"
#include "components/GlobalComponents.h"
#include "components/CommonFunc.h"

#define  GLOBAL_SHOWFONTSIZE       18   // 全局初始化字体大小
#define  FUNC_PUSHBUTTON_WIDTH     80   // 功能按钮宽度
#define  FUNC_PUSHBUTTON_HEIGHT    20   // 功能按钮高度
#define  FUNC_PUSHBUTTON_SPACE     2    // 功能按钮间隔

#if 0
// 带有标记的功能按钮
class MyPushButton : public QPushButton
{
    Q_OBJECT
public:
    MyPushButton(QString strTitle, int iKey, QWidget * parent = nullptr) : QPushButton(parent){
        setText(strTitle);
        m_iKey = iKey;
        connect(this, SIGNAL(clicked()), this, SLOT(slt_click()));
    }
private slots:
    void slt_click() {
        emit SendClicked(m_iKey);
    }
signals:
    void SendClicked(int);

private:
    int  m_iKey;    // 标记
};
#endif

// 标签页基类，定义QWidget和功能接口
class BaseFormWidget : public QWidget
{
    Q_OBJECT
public:
    BaseFormWidget(QWidget * parent = nullptr);
    virtual ~BaseFormWidget() {}

    virtual void init(){};                    // 添加后初始化
    virtual void saveData(){};                // 保存数据
    virtual void setFont(const QFont &){};    // 设置风格

    // 设置标签页序号
    void setFormIndex(uint iKey, FORM_PROC_TYPE eProcType);

    // 设置关闭按钮
    void newBaseClose();

protected:
    // 设置功能按钮样式
    void setBaseFont(const QFont &);

    // 往顶部工具栏添加按钮，并设置默认不添加间隔
    void addBaseToolFunc(QWidget *pFunc, bool bAddSpace = false);

    // 顶部工具栏添加弹簧
    void addBaseFuncStretch();

    // 添加功能按钮到合集中，用于样式配置
    void addFunc2Vec(QPushButton *pFunc);

    // 主界面添加控件
    void addWidget2BaseLayout(QWidget *pWidget, Qt::Alignment alignment = Qt::Alignment());

    // 主界面添加栅栏控件
    void addLayout2BaseLayout(QLayout *layout);

    // 设置主栅栏间隔
    void setMainLayoutSpacing(uint ival = 0);

signals:
    // 向外层发送关闭信号
    void SendClose(uint iKey);
    // 发送状态数据到底部状态栏
    void SendStatusMsg(QString& strMsg);

private slots:
    // 标签页关闭按钮动作
    void sltCloseTab();

public:
    FORM_PROC_TYPE          m_eProcType;     // 标签对应内容
    QString                 m_strSavePath;   // 默认保存路径

private:
    uint                    m_uiFormIndex;   // 标签页序号
    QVBoxLayout*            m_pQVBoxLayout;  // 主栅格
    QHBoxLayout*            m_pBaseFunc;     // 顶部工具栏
    QVector<QWidget*>       m_vecFunc;       // 功能按钮集合，用于统一配置
};

#endif // FORM_WIDGETBASE_H
